import matplotlib.pyplot as plt
fig = plt.figure("123")

"""希望一张表上有两根数据线？？？？？？？？？？？？？？"""
plt.figure('PyTorch_CNN_Loss')
# x = [range(0, num_epochs)]
# y = [random.randint(20, 35) for item in range(120)]
ret,axes = plt.subplots(2,2)
axes = axes.flutten()
axes[0].xlabel('epochs')
axes[0].ylabel('loss')
axes[0].ylim(0, 1.0) # consistent scale
axes[0].xlim(0, len(avg_train_losses)+1) # consistent scale
axes[0].plot(avg_train_losses, label='tra_Loss')  # 列表元素用plt显示出来
axes[0].plot(avg_valid_losses, label='val_Loss')  # 列表元素用plt显示出来
axes[1].plot(accurancy_list1, label='tra_accurancy')
axes[1].plot(accurancy_list2, label='val_accurancy')
plt.grid(True)  # 需要网格
plt.tight_layout()
plt.legend()  # 窗口界面停留


plt.show()



"""求特征图"""
id = 0
input_x = train_data[1][0].unsqueeze(0)  # unsqueeze（0）的作用是在最前面添加一个维度（batch）
print(input_x.shape)
feature_map1, feature_map2 = model.restore_feature(input_x)

# print("__++++",feature_maps)

j = 0
for i in range(4):
    plt.figure("feature_map1", figsize=(10, 7))
    print('特征图1展示：')
    plt.subplot(j + 1, 4, i + 1)
    plt.axis('off')  # 坐标刻度
    plt.imshow(feature_map1[j][0, i, ...].data.numpy())

    plt.figure("feature_map2", figsize=(10, 7))
    print('卷积层2的特征图：')
    plt.subplot(j + 1, 4, i + 1)
    plt.axis('off')
    plt.imshow(feature_map2[j + 1][0, i, ...].data.numpy())